//package com.light.dp.flink.utils;
//
//
//import com.light.dp.flink.dto.DataChangeInfo;
//
//import java.nio.charset.StandardCharsets;
//import java.text.SimpleDateFormat;
//import java.time.LocalDate;
//import java.time.LocalTime;
//import java.time.format.DateTimeFormatter;
//import java.util.ArrayList;
//import java.util.List;
//import java.util.Set;
//
//import static com.rn.smart.datasync.util.DebeziumUtil.*;
//
//public class SinkSqlUtil {
//
//    public static String insertSql(DataChangeInfo changeInfo, String targetDatabase) {
//        Set<String> filterColumns = DataBaseUtils.getColumnNames(targetDatabase, changeInfo.getTableName());
//        List<ChangeColumn> changeColumns = List.of(changeInfo.getColumns());
//        StringBuilder sql = new StringBuilder("insert IGNORE into `" + targetDatabase + "`.`" + changeInfo.getTableName() + "` (");
//        StringBuilder valSql = new StringBuilder(") VALUES (");
//        boolean flag = false;
//        for (int i = 0; i < changeColumns.size(); i++) {
//            ChangeColumn changeColumn = changeColumns.get(i);
//            String columnName = changeColumn.getName();
//            if (changeColumn.getValue() == null || !filterColumns.contains(columnName)) {
//                continue;
//            }
//            flag = true;
//            sql.append("`").append(columnName).append("`");
//            String value = new String(changeColumn.getValue().getBytes(StandardCharsets.UTF_8));
//            value = value.replace("'", "''"); // 处理单引号
//            switch (changeColumn.getType()) {
//                case STRING:
//                case BYTES:
//                    value = "'" + value + "'";
//                    break;
//                case DATETIME:
//                    value = "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Long.parseLong(value)) + "'";
//                    break;
//                case DATE:
//                    value = "'" + convertDaysToDateString(Integer.parseInt(value)) + "'";
//                    break;
//                case TIME:
//                    value = "'" + millisecondsToTimeString(Long.parseLong(value)) + "'";
//                    break;
//                default:
//            }
//            valSql.append(value);
//            if (i != changeColumns.size() - 1) {
//                sql.append(",");
//                valSql.append(",");
//            }
//        }
//        if (!flag) {
//            return null;
//        }
//        sql.append(valSql);
//        sql.append(")");
//        return sql.toString().replaceAll(",\\)", ")");
//    }
//
//    public static String updateSql(DataChangeInfo changeInfo, String targetDatabase) {
//        Set<String> filterColumns = DataBaseUtils.getColumnNames(targetDatabase, changeInfo.getTableName());
//        List<ChangeColumn> changeColumns = List.of(changeInfo.getColumns());
//        StringBuilder sql = new StringBuilder("update `" + targetDatabase + "`.`" + changeInfo.getTableName() + "` set ");
//        int updateSize = changeInfo.getColumns().length;
//        int count = 0;
//        boolean flag = false;
//        for (ChangeColumn changeColumn : changeColumns) {
//            count++;
//            if (!filterColumns.contains(changeColumn.getName()) || changeColumn.isPrimary()) {
//                continue;
//            }
//            flag = true;
//            String value = changeColumn.getValue();
//            if (value != null) {
//                value = value.replace("'", "''"); // 处理单引号
//                switch (changeColumn.getType()) {
//                    case STRING:
//                    case BYTES:
//                        value = "'" + value + "'";
//                        break;
//                    case DATETIME:
//                        value = "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Long.parseLong(value)) + "'";
//                        break;
//                    case DATE:
//                        value = "'" + convertDaysToDateString(Integer.parseInt(value)) + "'";
//                        break;
//                    case TIME:
//                        value = "'" + millisecondsToTimeString(Long.parseLong(value)) + "'";
//                        break;
//                    default:
//                }
//            } else {
//                value = "null";
//            }
//            sql.append("`").append(changeColumn.getName()).append("`").append(" = ").append(value);
//
//            if (count != updateSize) {
//                sql.append(",");
//            }
//        }
//        if (!flag) {
//            return null;
//        }
//        sql.append(" where ");
//        for (ChangeColumn changeColumn : changeColumns) {
//            if (changeColumn.isPrimary()) {
//                //暂时只支持单一主键
//                String value = changeColumn.getValue().replace("'", "''"); // 处理单引号
//                if (changeColumn.getType().startsWith("char") || changeColumn.getType().startsWith("varchar")
//                        || changeColumn.getType().startsWith("enum") || changeColumn.getType().startsWith("text")
//                        || changeColumn.getType().startsWith("blob") || changeColumn.getType().startsWith("date")
//                        || changeColumn.getType().startsWith("timestamp")) {
//                    sql.append("`").append(changeColumn.getName()).append("` = '").append(value).append("'");
//                } else {
//                    sql.append("`").append(changeColumn.getName()).append("` = ").append(value);
//                }
//                break;
//            }
//        }
//        return sql.toString().replace(", where", " where");
//    }
//
//    public static String deleteSql(DataChangeInfo changeInfo, String targetDatabase) {
//        ChangeColumn[] changeColumns = changeInfo.getColumns();
//        StringBuilder sql = new StringBuilder("delete from `" + targetDatabase + "`.`" + changeInfo.getTableName() + "` where ");
//        List<String> conditionSqls = new ArrayList<>();
//        for (ChangeColumn changeColumn : changeColumns) {
//            if (changeColumn.isPrimary()) {
//                StringBuilder conditionSql = new StringBuilder();
//                //暂时只支持单一主键
//                String value = changeColumn.getValue().replace("'", "''"); // 处理单引号
//                conditionSql.append("`").append(changeColumn.getName()).append("` = ");
//                switch (changeColumn.getType()) {
//                    case STRING:
//                    case BYTES:
//                        value = "'" + value + "'";
//                        break;
//                    case DATETIME:
//                        value = "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Long.parseLong(value)) + "'";
//                        break;
//                    case DATE:
//                        value = "'" + convertDaysToDateString(Integer.parseInt(value)) + "'";
//                        break;
//                    case TIME:
//                        value = "'" + millisecondsToTimeString(Long.parseLong(value)) + "'";
//                        break;
//                    default:
//                }
//                conditionSql.append(value);
//                conditionSqls.add(conditionSql.toString());
//            }
//        }
//        return sql.append(String.join(" and ", conditionSqls)).toString();
//    }
//
//    public static String convertDaysToDateString(long days) {
//        // 基准日期
//        LocalDate baseDate = LocalDate.of(1970, 1, 1);
//        // 将天数加到基准日期上
//        LocalDate date = baseDate.plusDays(days);
//        // 将 LocalDate 格式化为字符串
//        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
//        return date.format(formatter);
//    }
//
//    public static String millisecondsToTimeString(long nanos) {
//        // 将纳秒转换为 LocalTime
//        LocalTime time = LocalTime.ofNanoOfDay(nanos * 1000);
//
//        // 格式化为字符串
//        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss");
//        return time.format(formatter);
//    }
//
//}
